//sort(arr,arr+n,cmp)    //对数组arr进行排序，cmp为自定义的比较函数
//count(arr,arr+n,val)   //统计数组arr中值为val的元素个数
//vector                 //动态数组
//set                    //会自动排序，查找速度快//会自动去重
//stack
//queue
//find(arr,arr+n,val)     //查找数组arr中值为val的元素的位置并返回指定位置的迭代器
//find_if(arr,arr+n,func) //查找数组arr中第一个使func返回true的元素的位置并返回指定位置的迭代器
/*auto xx=find_if(arr.begin(),arr.end(),[num](node r){return r.b==num;});
使用事例*/
//[capture](params)->return_type{body} //lambda表达式 capture为捕获列表，params为参数列表，return_type为返回类型，body为函数体
//string                 //字符串
//map                    //会自动排序，查找速度快//会自动去重
//copy(b.begin(),b.end(),back_inserter(a));  //复制b容器的所有元素到a容器(a，b可以为不同容器)

//下列查找皆通过二分查找实现
//binary_search(arr,arr+n,target);           //对已经排好序的数组或容器查找 返回布尔值
//equal_range(arr,arr+n,target,cmp);         //返回范围 cmp为比较函数(可传lambda表达式)
//upper_bound(arr,arr+n,val);                //查找第一个!!大于val的元素并返回该元素的迭代器否则返回last
//lower_bound(arr,arr+n,val);                //查找第一个!!小于val的元素并返回该元素的迭代器否则返回last

//cout<<fixed<<setorecision(2)<<num;         //cout的控制输出几维小数
//__builtin_popcount(num);                   //时间复杂度为o(1)状态下快速得到num二进制状态下1的个数
//stoi(string);                               //将一个字符串存储的数字变成int类型

/*
#ifdef Testfile
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
#endif //重定向输入输出流

//编译时使用g++ -DTestfile -o ./h ./main.cpp
*/

/*
    vector<int> heap(vec.begin(),vec.end()); //建立一个范围的最大堆
    make_heap(heap.begin(),heap.end());

    若要删除堆顶元素先用pop_heap函数将堆顶元素移到末尾再用vector容器的子函数pop_back删除末尾元素

    pop_heap(heap.begin(),heap.end());
    heap.pop_back();

    若要添加元素先用vector容器的子函数push_back将需要添加的元素添加到容器尾

    int val;
    cin>>val;
    heap.push_back(val);
    push_heap(heap.begin(),heap.end());
*/

/*
    pair<int,int> p; //一个结构体或一个pair容器
    auto [x,y]=p; //可以通过该语法快速分离该结构体的两个元素
*/